package com.lnt.mq.rabbitmq.producer;

import com.lnt.mq.rabbitmq.util.RabbitConstant;
import com.lnt.mq.rabbitmq.util.RabbitUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 发布者
 */
public class Producer {

    public static void main(String[] args) throws IOException, TimeoutException {
        //获取TCP长连接
        Connection connection = RabbitUtil.getConnection();
        // 创建通信信道，相当于TCP中的虚拟连接
        Channel channel = connection.createChannel();

        //创建队列，声明并创建一个队列，如果队列已经存在，就使用这个队列
        // 第一个参数:s :队列名称ID
        // 第二个参数:b :是否持久化，false表示不持久化，MQ停掉数据会丢失
        // 第三个参数:b1:是否队列私有化,false则代表所有消费者都可以访问,true表示只有第一次拥有他的消费者才能一直使用
        // 第四个参数:b2:是否自动删除,false代表连接停机后不自动删除这个队列
        // 第五个参数:map:其他额外参数
        channel.queueDeclare(RabbitConstant.QUEUE_HELLOWORLD, false, false, false, null);

        //发送消息
        // 第一个参数:exchange 交换机参数，
        // 第二个参数:s1: 队列名称
        // 第三个参数:basicProperties: null
        // 第四个参数:bytes[] 发送的消息比特数组
        String message = "RabbitMQ Test";
        channel.basicPublish("", RabbitConstant.QUEUE_HELLOWORLD, null, message.getBytes());
        channel.close();
        connection.close();
        System.out.println("消息已发送");
    }
}
